SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [dbo].[LIQMaterialDidactico2daCuota]
 @Agente INT,
 @Servicio INT,
 @Plaza INT,
 @Resultado DECIMAL OUTPUT ,
 @idLiquidacion INT,
 @DiasALiquidar INT,
 @DiasDelPeriodo INT,
 @Desde DATETIME,
 @Hasta DATETIME


AS
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SET NOCOUNT ON
SET DATEFORMAT DMY

DECLARE @Mes INT
DECLARE @DiasAComparar INT
DECLARE @DiasTrabajados INT
DECLARE @ImporteMaterialDidactico2daC DECIMAL(18,4)
DECLARE @CabeceraDeLiquidacion INT
DECLARE @Afiliacion INT
DECLARE @RegimenSalarial INT
DECLARE @SubOrganizacion INT
DECLARE @Organizacion INT
DECLARE @SituacionRevista INT
DECLARE @NroError INT
DECLARE @Horas INT
DECLARE @SueldoBasico DECIMAL(18,4)
DECLARE @TipoLiquidacion INT 
DECLARE @MesATrabajarPor2daCMaterialDidactico INT 
DECLARE @DiasNecesariosTrabajadosPara2daCMaterialDidactico INT 
DECLARE @FechaInicioPeriodoLectivoLIQ  VARCHAR(10)
DECLARE @FechaFinPeriodoLectivoLIQ  VARCHAR(10)
DECLARE @FechaArmadaMesRealPagoMaterial VARCHAR(10)

DECLARE @PagosRealizados INT


SELECT @CabeceraDeLiquidacion = IdCabeceraLiquidacion FROM tb_Liquidaciones WHERE IdLiquidacion = @IdLiquidacion
SELECT @TipoLiquidacion = TipoDeLiquidacion, @Mes = Mes FROM Tb_CabeceraDeLiquidacion WHERE IDCabeceraDeLiquidacion =  @CabeceraDeLiquidacion

SELECT @MesATrabajarPor2daCMaterialDidactico = CONVERT(INT, dbo.fnObtenerValorDeParametro ('MesATrabajarPor2daCMaterialDidactico', @Hasta))
SELECT @DiasNecesariosTrabajadosPara2daCMaterialDidactico = CONVERT(INT, dbo.fnObtenerValorDeParametro ('DiasNecesariosTrabajadosPara2daCMaterialDidactico', @Hasta))
SELECT @FechaInicioPeriodoLectivoLIQ = CONVERT(VARCHAR(10), dbo.fnObtenerValorDeParametro ('FechaInicioPeriodoLectivoLIQ', @Hasta))
SELECT @FechaFinPeriodoLectivoLIQ = CONVERT(VARCHAR(10), dbo.fnObtenerValorDeParametro ('FechaFinPeriodoLectivoLIQ', @Hasta))
SELECT @ImporteMaterialDidactico2daC = CONVERT(DECIMAL(18,4), dbo.fnObtenerValorDeParametro ('ImportePor2daCMaterialDidactico', @Hasta))


SELECT @SueldoBasico = MontoHaberes FROM tb_RegistroDeLiquidaciones 
	WHERE Liquidacion = @idLiquidacion AND Servicio = @Servicio AND Concepto = 4


SELECT @Afiliacion = idAfiliacion	 FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @horas= horas, @regimensalarial = regimensalarial, @SubOrganizacion = SubOrganizacion 
	FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista 
	FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio

IF (SELECT OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE
	idSubOrganizacion = @SubOrganizacion) Is Not Null
	SELECT @Organizacion = OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE
	idSubOrganizacion = @SubOrganizacion

-- //para que calcule los 150 días a partir de la fecha de inicio del servicio y no @FechaInicioPeriodoLectivoLIQ//
IF @SituacionRevista <> 4 
	SELECT @FechaArmadaMesRealPagoMaterial = convert(VARCHAR(10), convert(DATETIME, '15/'+convert(VARCHAR(2), @MesATrabajarPor2daCMaterialDidactico)+'/'+convert(VARCHAR(4), year(@Desde))),103)
ELSE
	SELECT @FechaArmadaMesRealPagoMaterial = convert(VARCHAR(10), convert(DATETIME, '30/'+convert(VARCHAR(2), @MesATrabajarPor2daCMaterialDidactico-1)+'/'+convert(VARCHAR(4), year(@Desde))),103)


SET @NroError = 0 


IF  @SueldoBasico > 0
BEGIN
--// 2da cuota de los que les pagué en Marzo en @MesATrabajarPor2daCMaterialDidactico (Julio)
   IF @Mes = @MesATrabajarPor2daCMaterialDidactico

    BEGIN

		--// Ver si le pagué una vez en el año (Febrero/Marzo)
		SELECT @PagosRealizados = count(R.idRegistroLiquidacion) FROM tb_RegistroDeLiquidaciones R 
		INNER JOIN tb_Liquidaciones L ON IdLiquidacion = Liquidacion 
		    AND L.Desde <= @FechaInicioPeriodoLectivoLIQ
			AND YEAR(L.Desde) = YEAR(GETDATE()) 
			AND R.Agente = @Agente 
			AND Concepto = 41 
			AND MontoHaberes > 0
--			AND L.tipo = 4 
  		   	AND ( (@tipoliquidacion = 4 AND L.Tipo  = 4 )  --definitiva 
  				OR 
  				 ( @tipoliquidacion = 1 AND (L.Tipo = 4 OR (L.Tipo =1 AND L.IDCabeceraLiquidacion =@CabeceraDeLiquidacion ))  )	--simulacion
  			         )

		PRINT @PagosRealizados	

		IF @PagosRealizados = 1 --//le pagué en (Febrero/Marzo)
			--//veo que no le pagué en esta liquidacion
			IF @Agente NOT IN (SELECT R.Agente FROM tb_RegistroDeLiquidaciones R 
								INNER JOIN tb_Liquidaciones L ON L.idLiquidacion= R.Liquidacion 
								WHERE L.IDCabeceraLiquidacion = @CabeceraDeLiquidacion AND R.Concepto = 41 AND R.MontoHaberes >0 ) 			
			 BEGIN								

			--//Ver si trabajó los dias requeridos  (30/06/2008 - InicioperiodoLIQ) ultima fecha de baja de servicio o si tiene alguno abierto entonces va @hasta			
				SET @DiasTrabajados =DBO.fnLiqDiasTrabajados(@Agente,@FechaInicioPeriodoLectivoLIQ, @FechaArmadaMesRealPagoMaterial,0,NULL) 
				SET @DiasAComparar= datediff(day,@FechaInicioPeriodoLectivoLiQ, @FechaArmadaMesRealPagoMaterial)

				IF @DiasAComparar <=  @DiasTrabajados AND @SueldoBasico > 0
			 	BEGIN
				 	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista,DiasLiquidados, SubOrganizacion)
					VALUES (null, @Afiliacion, @Agente, null, 1, null, 41, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @ImporteMaterialDidactico2daC, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
				
					SELECT @NroError = @@error
					
				END	
			END
	END	
	
  ELSE  
  -- No estoy liquidando en el mes @MesATrabajarPor2daCMaterialDidactico (No es Julio)

	BEGIN
	
		SELECT @PagosRealizados = count(R.idRegistroLiquidacion) FROM tb_RegistroDeLiquidaciones R 
		INNER JOIN tb_Liquidaciones L ON IdLiquidacion = Liquidacion 
			AND L.Desde > @FechaInicioPeriodoLectivoLIQ
			AND YEAR(L.Desde) = YEAR(GETDATE()) 
			AND R.Agente = @Agente 
			AND Concepto = 41 
			AND MontoHaberes > 0
--			AND L.tipo = 4 
  		     	AND (  (@tipoliquidacion = 4 AND L.Tipo  = 4 )  --definitiva 
		   		 OR 
		   	            ( @tipoliquidacion = 1 AND (L.Tipo = 4 OR (L.Tipo =1 AND L.IDCabeceraLiquidacion =@CabeceraDeLiquidacion ))  )	--simulacion
		   		)		



		IF @PagosRealizados = 1 --// le pagué despues de (Febrero/Marzo)
			--//veo que no le pagué en esta liquidacion
			IF @Agente NOT IN (SELECT R.Agente FROM tb_RegistroDeLiquidaciones R 
								INNER JOIN tb_Liquidaciones L ON L.idLiquidacion= R.Liquidacion 
								WHERE L.IDCabeceraLiquidacion = @CabeceraDeLiquidacion AND R.Concepto = 41 AND R.MontoHaberes >0 ) 			

			BEGIN
				--//Cuantos días trabajó desde que empezó el ciclo lectivo (otra manera seria buscar minfecha de todos los servicios y contar la cantidad de dias)
				SET @DiasTrabajados =DBO.fnLiqDiasTrabajados(@Agente,@FechaInicioPeriodoLectivoLIQ, @FechaArmadaMesRealPagoMaterial,0,NULL)

				IF @DiasNecesariosTrabajadosPara2daCMaterialDidactico <=  @DiasTrabajados AND @SueldoBasico > 0
			 	BEGIN
				 	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista,DiasLiquidados, SubOrganizacion)
					VALUES (null, @Afiliacion, @Agente, null, 1, null, 41, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @ImporteMaterialDidactico2daC, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
				
					SELECT @NroError = @@error
					
				END	
			END
		
	END
END	
--//*

--//HAY QUE Generalizar para los meses del año siguiente (Ene Feb 2009 )


	
IF @NroError <> 0
BEGIN
	INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio, CabeceraDeLiquidacion, NumeroDeError) 
	VALUES(@Agente, 41, convert(varchar,@NroError), getdate(), @idLiquidacion,@Organizacion, @Servicio, @CabeceraDeLiquidacion, @NroError)
END
GO
